package com.zxsj.fdk.study.common.utils;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.function.Function;

/**
 * @Description
 * @Author wangmingliang
 * @Date 2021/03/08
 **/
public class NullableUtils {

    public static final LocalDateTime TIMESTAMP_DEFAULT_ACCURATE = LocalDateTime.parse("2037-12-31T00:00:00");

    public static <T, U> T nullable(U u, Function<U, T> function) {

        if (Objects.isNull(u)) {
            return null;
        }
        return function.apply(u);
    }

    public static <T> T nullable(T nullableValue, T defaultValue) {
        if (Objects.isNull(nullableValue)) {
            return defaultValue;
        }
        return nullableValue;
    }

    public static BigDecimal nullable(BigDecimal nullableValue) {
        return nullable(nullableValue, BigDecimal.ZERO);
    }

    public static String nullable(String nullableValue) {
        return nullable(nullableValue, "");
    }

    public static Integer nullable(Integer nullableValue) {
        return nullable(nullableValue, 0);
    }

    public static Byte nullable(Byte nullableValue) {
        return nullable(nullableValue, (byte)0);
    }

    public static Boolean nullable(Boolean nullableValue) {
        return nullable(nullableValue, false);
    }

    public static Long nullable(Long nullableValue) {
        return nullable(nullableValue, 0L);
    }

    public static LocalDateTime nullable(LocalDateTime time) {
        return nullable(time, TIMESTAMP_DEFAULT_ACCURATE);
    }


    public static <T> List<T> nullable(List<T> nullableValue) {
        return nullable(nullableValue, new ArrayList<>(0));
    }
}



